Retrieving a String That Describes a Filter

An application often needs to display a string that describes the current format. This task can be accomplished easily with the acmFilterTagDetails29GM_.. and acmFilterDetails_VX5S3 functions. These functions must be called with the appropriate filter or filter tag. The following example shows how to use these functions.

BOOL GetFilterDescription

(

    LPWAVEFILTER  pwfltr,

    LPTSTR        pszFilterTag,

    LPTSTR        pszFilter

)

    MMRESULT      mmr;

 

    // Retrieve the name for the filter tag of the specified filter.

    if (NULL != pszFilterTag) { 

        ACMFILTERTAGDETAILS aftd;

 

        // Initialize all unused members of the ACMFILTERTAGDETAILS

        // structure to zero.

        memset(&aftd, 0, sizeof(aftd));

 

        // Fill in the required members of the ACMFILTERTAGDETAILS

        // structure for the ACM_FILTERTAGDETAILSF_FILTERTAG query.

        aftd.cbStruct = sizeof(aftd);

        aftd.dwFilterTag = pwfltr->dwFilterTag;

 

        // Ask the ACM to find the first available driver that

        // supports the specified filter tag.

        mmr = acmFilterTagDetails(NULL, &aftd,

            ACM_FILTERTAGDETAILSF_FILTERTAG);

        if (MMSYSERR_NOERROR != mmr) { 

            // No ACM driver is available that supports the

            // specified filter tag.

            return (FALSE);

        }

 

        // Copy the filter tag name into the calling application's

        // buffer.

        lstrcpy(pszFilterTag, aftd.szFilterTag);

    }

 

    // Retrieve the description of the attributes for the specified

    // filter.

    if (NULL != pszFilter) { 

        ACMFILTERDETAILS afd;

 

        // Initialize all unused members of the ACMFILTERDETAILS

        // structure to zero.

        memset(&afd, 0, sizeof(afd));

 

        // Fill in the required members of the ACMFILTERDETAILS

        // structure for the ACM_FILTERDETAILSF_FILTER query.

        afd.cbStruct    = sizeof(afd);

        afd.dwFilterTag = pwfltr->dwFilterTag;

        afd.pwfltr      = pwfltr;

        afd.cbwfltr     = pwfltr->cbStruct;

 

        // Ask the ACM to find the first available driver that

        // supports the specified filter.

        mmr = acmFilterDetails(NULL, &afd, ACM_FILTERDETAILSF_FILTER);

        if (MMSYSERR_NOERROR != mmr) { 

            // No ACM driver is available that supports the

            // specified filter.

            return (FALSE);

        }

 

        // Copy the filter attributes description into the calling

        // application's buffer.

        lstrcpy(pszFilter, afd.szFilter);

    }

 

    return (TRUE);

}